package com.lingdong.onlinejudge.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lingdong.onlinejudge.model.dto.team.*;
import com.lingdong.onlinejudge.model.entity.Team;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lingdong.onlinejudge.model.vo.team.TeamVo;

import java.util.List;

/**
* @author lzw
* @description 针对表【team(队伍表)】的数据库操作Service
* @createDate 2024-02-12 20:26:24
*/
public interface TeamService extends IService<Team> {

    /**
     * 创建队伍
     * @param teamCreateDto 队伍信息
     * @return 结果
     */
    Boolean createTeam(TeamCreateDto teamCreateDto, String token);

    /**
     * 获取队伍邀请码
     * @param teamCodeDto 队伍邀请码信息
     * @return 队伍邀请码
     */
    String getTeamCode(TeamCodeDto teamCodeDto);

    /**
     * 获取队伍信息
     * @param id 队伍id
     * @return 队伍信息
     */
    TeamVo getTeam(Long id);

    /**
     * 加入队伍
     * @param teamJoinDto 队伍信息
     * @return 结果
     */
    Boolean joinTeam(TeamJoinDto teamJoinDto, String token);

    /**
     * 查询队伍列表
     * @param teamListDto 队伍信息
     * @return 队伍信息
     */
    List<Team> queryTeamList(TeamListDto teamListDto);

    /**
     * 查询队伍列表分页
     * @param teamPageDto 队伍信息
     * @return 队伍信息
     */
    Page<Team> queryTeamByPage(TeamPageDto teamPageDto);

    /**
     * 解散队伍
     * @param teamId 队伍id
     * @return 结果
     */
    Boolean dissolveTeam(Long teamId);

    /**
     * 退出队伍
     * @param teamExitDto 信息
     * @return 结果
     */
    Boolean exitTeam(TeamExitDto teamExitDto);

    /**
     * 队伍审核
     * @param teamExamineDto 信息
     * @return 结果
     */
    Boolean examineTeam(TeamExamineDto teamExamineDto);
}
